package com.zjsru.plan2023.oneday;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: cookLee
 * @Date: 2023-08-24
 * 统计参与通信的服务器
 * \
 * 如果两台服务器位于同一行或者同一列，我们就认为它们之间可以进行通信
 * \
 * 输入：grid = [[1,0],[1,1]]
 * 输出：3
 * 解释：所有这些服务器都至少可以与一台别的服务器进行通信。
 * \
 * 输入：grid = [[1,1,0,0],[0,0,1,0],[0,0,1,0],[0,0,0,1]]
 * 输出：4
 * 解释：第一行的两台服务器互相通信，第三列的两台服务器互相通信，但右下角的服务器无法与其他服务器通信
 */
public class CountServers {

    public int countServers(int[][] grid) {
        int ans  = 0;
        int rowLen = grid.length, colLen = grid[0].length;
        Map<Integer,Integer> rows = new HashMap<>();
        Map<Integer,Integer> cols = new HashMap<>();
        for (int i = 0; i < rowLen; i++) {
            for (int j = 0; j < colLen; j++) {
                int number = grid[i][j];
                if (number == 1) {
                    rows.put(i, rows.getOrDefault(i, 0) + 1);
                    cols.put(j, cols.getOrDefault(j, 0) + 1);
                }
            }
        }
        for (int i = 0; i < rowLen; i++) {
            for (int j = 0; j < colLen; j++) {
                //在为通信器的单位中（1）,只有超过2则代表该列/行存在可以通信的机器
                if(grid[i][j] == 1 &&( rows.get(i) > 1 || cols.get(j) > 1)){
                    ans++;
                }
            }
        }

        return ans;
    }

    public static void main(String[] args) {
        CountServers countServers = new CountServers();
        int[][] grid = new int[][]{{1, 0}, {1, 1}};
        System.out.println(countServers.countServers(grid));
    }

}
